package com.insight.modules.umpPwdManage.service.impl;


import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanqiao.insight.acore.system.service.impl.SysDictServiceImpl;
import com.yuanqiao.insight.common.util.common.LocalCacheUtils;
import org.apache.commons.lang3.StringUtils;
import com.insight.common.system.vo.DictModel;
import com.insight.modules.umpPwdManage.entity.UmpPwdManage;
import com.insight.modules.umpPwdManage.mapper.UmpPwdManageMapper;
import com.insight.modules.umpPwdManage.service.IUmpPwdManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;


/**
 * @Description: 登录密码配置
 * @Author: jeecg-boot
 * @Date:   2021-08-10
 * @Version: V1.0
 */
@Service
public class UmpPwdManageServiceImpl extends ServiceImpl<UmpPwdManageMapper, UmpPwdManage> implements IUmpPwdManageService {
    LocalCacheUtils cacheUtils = LocalCacheUtils.getInstance();
    @Autowired
    private SysDictServiceImpl sysDictServiceImpl;
    @Autowired
    private UmpPwdManageMapper umpPwdManageMapper;
    @Override
    public UmpPwdManage getZip() {
        return umpPwdManageMapper.findAllPwdManage();
    }

    /**
     * 根据数据字典配置，对导出的 Excel 文件名进行脱敏重命名。
     *
     * <p>功能说明：
     * - 若系统启用了“导出文件名脱敏”开关（由缓存中的配置项控制），
     *   则根据数据字典 "ExportSecretMapping" 中配置的映射关系，对导出的文件名进行脱敏重命名。
     * - 重命名规则：
     *   如果文件名存在于字典映射中，则在文件名后追加 "_脱敏值"。
     *   特殊处理：若文件名是 "拓扑"，则不追加原文件名，仅使用脱敏值。
     *
     * @param fileName 原始文件名
     * @return 脱敏后的文件名（若未启用或未匹配，则返回原文件名）
     */
    @Override
    public String exportXlsRename(String fileName) {
        // 从缓存中获取导出脱敏功能是否开启的标识，默认为 "false"
        String secretFlag = String.valueOf(
                Optional.ofNullable(
                        cacheUtils.getValueByKey(com.yuanqiao.insight.common.constant.CommonConstant.DATA_DICT_KEY + "InExSecret_isEnable")
                ).orElse("false")
        );

        // 如果启用了导出脱敏功能
        if ("true".equals(secretFlag)) {
            // 查询数据字典中 code 为 "ExportSecretMapping" 的所有项
            List<DictModel> exSecretList = sysDictServiceImpl.queryDictItemsByCode("ExportSecretMapping");

            // 若字典项不为空，处理文件名
            if (CollUtil.isNotEmpty(exSecretList)) {
                // 构造 Map：文件名文本 -> 脱敏后的值
                Map<String, String> exSecretMap = exSecretList.stream()
                        .collect(Collectors.toMap(DictModel::getText, DictModel::getValue));

                // 构造新文件名：
                // - 如果 fileName 是 "拓扑"，则不保留原文件名；
                // - 否则保留原文件名；
                // - 若映射中存在 fileName，则添加 "_" + 映射值，否则不追加。
                fileName = String.format(
                        "%s%s",
                        StringUtils.equals(fileName, "拓扑") ? "" : fileName,
                        Objects.isNull(exSecretMap.get(fileName)) ? "" : "_" + exSecretMap.get(fileName)
                );
            }
        }

        // 返回最终文件名
        return fileName;
    }

}
